/*
 * Copyright (c) 2013-2018 上海汇数数据. All rights reserved.
 * @(#) GenKey.java 2018-08-06 17:26
 */

package cn.jh.common.core.crypto;

import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;


/**
 * @author Fuchun
 * @since 1.0
 */
public interface GenKey {

    /** 要处理的条目的别名。*/
    String getAlias();

    /** 密钥口令，如果不设置，则与{@link #getStorePass()} 值相同。 */
    @Nullable
    String getKeyPass();

    /** 密钥库口令。 */
    String getStorePass();

    /** 密钥库类型。*/
    @Nullable
    String getStoreType();

    /** 密钥库名称（或生成路径）。*/
    String getKeyStore();

    /**
     * 密钥算法名称。
     * <pre>{@code
     * GenKeyPair  => DSA
     * GenSecKey   => DES
     * }</pre>
     */
    String getKeyAlg();

    /**
     * 密钥位大小。
     * <pre>{@code
     * Default Value:
     * GenKeyPair keyAlg=RSA    => 2048
     * GenKeyPair keyAlg=RSA    => 1024
     * GenKeyPair keyAlg=EC     => 256
     * GenSecKey  keyAlg=DES    => 56
     * GenSecKey  keyAlg=DESede => 168
     * }</pre>
     */
    int getKeySize();

    /** 提供方名称。例如：SunJCE, BC */
    @Nullable
    String getProviderName();

    /** 提供方类名。*/
    @Nullable
    String getProviderClass();

    /** 提供方参数。*/
    @Nullable
    String getProviderArg();

    /** 提供方类路径。*/
    @Nullable
    String getProviderPath();

    /** 是否详细输出。默认 false */
    boolean isView();

    default void appendProvider(@NotNull StringBuilder sb) {
        if (getProviderName() != null) {
            sb.append(" -providername ").append(getProviderName());
        }
        if (getProviderClass() != null) {
            sb.append(" -providerclass ").append(getProviderClass());
        }
        if (getProviderArg() != null) {
            sb.append(" -providerarg ").append(getProviderArg());
        }
        if (getProviderPath() != null) {
            sb.append(" -providerpath ").append(getProviderPath());
        }
    }

    String toCmdString();
}
